Aide sur les programmes de compilation

 
 
La structure des fichiers du SDK et des mods :
 
VTF2TGA :
 
La compilation d'un modèle :
 
En dehors de Hammer qu'on va utiliser pour créer des maps, il y a bien d'autres utilitaires pour compiler ces maps, pour créer des textures, pour compiler des modèles, pour gérer les séquences scriptées etc..
 
 
Il y a en outre plusieurs petits programmes qui vont servir à des tâches diverses, comme convertir les textures VTF en TGA qui peut servir à voir les textures d'origine et à les modifier avant de les recompiler. Il y a aussi un utilitaire pour convertir les textures contenues dans les fichiers WAD de l'ancien Half-Life en textures VTF pour HL 2, ça peut servir pour ceux qui voudraient convertir leur mod pour Half-Life en version Source.
 
 
VTF2TGA :
 
Comme premier exemple, prenons VTF2TGA qui sert à convertir une texture VTF en image TGA. Une texture VTF est en fait une série de mipmaps compressées créés à partir d'une image TGA et dont les propriétées sont définies dans un fichier VMT qui l'accompagne.
 
Lorsqu'on crée une mod, on va devoir redéssiner pas mal de textures adaptées. C'est un très gros travail, surtout que pour HL2 il faut des textures de grande taille en moyenne 512x512. Il peut donc être très important de simplement modifier des textures existantes, plutôt que recommencer à partir de zéro. Si vous avez déjà dessiné des textures, vous comprenez tout de suite, sinon essayez de le faire et vous verrez!!
Une texture ce n'est pas simplement un dessin, il faut que ça ait l'air vrai et naturel. Donner un aspect réaliste est ce qu'il y a de plus compliqué à faire, simuler des ombres et des reflets, ou donner un aspect granuleux c'est pas si simple!
On peut donc commencer par importer une texture existante assez proche de ce dont on a besoin puis on va la modifier et la recompiler.
La première étape va consister à extraire l'image TGA du fichier VTF. Comme VTF2TGA est un petit utilitaire DOS sans interface graphique, certains vont avoir de la peine à l'utiliser.
 
En fait il y a une méthode très simple pour convertir rapidement des textures sans avoir à manipuler des lignes de commandes ou des fichiers bat.
On ne peut pas simplement copier VTF2TGA et l'utiliser, car il a besoin des dlls contenues dans sourcesdk.
 
Ce qu'on va faire, c'est créer un raccourci vers VTF2TGA dans le dossier des textures à traiter, puis on va le modifier en y ajoutant un paramètre pour que ça puisse fonctionner.
 
On ouvre les propriétés du raccourci, et on ajoute simplement -i à la fin en laissant un espace avant le tiret.
 
Ensuite il n'y a plus qu'à prendre chaque texture VTF et à la glisser sur le raccourci pour lancer la conversion.
 
 
Avant de prendre d'autres exemples, il est nécessaire de préciser certaines choses importantes :
 
 
La structure utilisée par le SDK et le Source Engine n'est pas un sujet à prendre à la légère. Ne pensez pas que vous allez créer vos fichiers un peu partout puis les rassembler pour créer votre mod. Cette méthode est à oublier tout de suite!!!
Les distraits et les adeptes du foutoir absolu feraient mieux de se mettre à la page et d'adopter une méthode de travail stricte sous peine de ne simplement pas pouvoir travailler.
 
En effet, les utilitaires du SDK sont configurés pour utiliser automatiquement les variables d'environnement créées par le SDK lors de l'installation. Ceci veut dire que chaque utilitaire doit rester où il est et ne travaillera que dans la configuration de la mod qu'on va définir par le moyen du menu du SDK. Dans ce menu on va trouver Create a Mod dans la partie UTILITIES
 
Une fois qu'on a défini un dossier pour la mod qu'on va développer (mettez votre dossier dans le dossier c:\valve\Steam\SteamApps\SourceMods c'est le dossier qui a été prévu pour contenir toutes les mods de HL2), on va y mettre toutes les ressources nécessaires à la mod en respectant scrupuleusement la structure nécessaire au Source Engine..
 
Pour les maps on aura le dossier maps. Pour les textures on aura deux dossiers, le dossier materialsrc et le dossier materials.
Materialsrc contiendra les ressources des textures, images tga, fichiers de compilation etc.., le dossier materials contiendra les textures finies.
Vous n'aurez pas à transférer les textures finies à leur place, ça se fera automatiquement en respectant la structures des dossiers et sous-dossiers.
Pour les modèles c'est pareille, les ressources dans le dossier models sources et les modèles finis seront dans le dossier models
 
Si vous créez tous ces dossier correctement, y compris les sous-dossiers, par la suite il n'y aura pas de problèmes de compilation. Dans le cas contraire vous recevrez des messages d'erreur vous disant que l'utilitaire n'a pas pu créer le fichier ou que le fichier est introuvable.
 
Cette méthode de travail est exemplaire, elle permet de gagner beaucoup de temps et évite de perdre des fichiers. Elle garanti aussi que le source engine sera capable de lancer votre mod avec tous les modèles, les textures, les sons que vous aurez créé.
 
 
 
Compilation d'un modèle :
 
 
Lorsqu'on aura créé un modèle avec XSI, on va obtenir des smds qu'il va falloir compiler pour obtenir un fichier MDL.
 
En fait avec HL2, on n'aura pas qu'un fichier MDL, mais on va obtenir 6 fichiers différents.
 
Un fichier MDL bien sûr contenant les information générales
Un fichier PHY qui contient les information pour le moteur physique
Un fichier VVD
Trois fichiers VTX pour les informations sur les textures selon la version de DirectX
 
Tous ces fichiers seront créés automatiquement par Studiomdl et on n'aura pas à s'en soucier, mais le principal sera de savoir comment compiler ce modèle.
On va procéder comme autrefois pour Half-Life, on va créer un fichier texte qu'on va nommer du nom du modèle avec l'extension .QCI
Ce fichier de compilation va contenir toutes les informations nécessaires.
 
Si on a suivit le tutoriel sur XSI et sur l'exportation des fichiers, on va avoir à disposition:
 
Un fichier SMD de référence nommé par exemple : bidule_ref.smd
Un fichier SMD de référence pour le modèle physique : ragdoll.smd
Un fichier SMD d'animation d'une seule image pour la pose en mode ragdoll : ragdoll_pose.smd
On va également avoir 5 fichiers SDM de LOD : bidule_LOD_1.smd, bidule_LOD_2.smd, bidule_LOD_3.smd, bidule_LOD_4.smd, bidule_LOD_5.smd et un fichier LOD pour l'ombre : bidule_shadow_LOD.smd
 
Et les animations où sont elles ? !!!
 
Là on a le choix, soit on refait toutes les animations nécessaires pour le modèle, ce qui dans le cas d'un humain peut s'avérer très long et compliqué, soit on utilise les animations existantes pour un modèle du jeu.
 
En effet, on a la possibilité d'utiliser les animations créées pour d'autres modèle à la condition d'utiliser le même squelette standard.
 
On peut très bien compiler un modèle sans avoir une animation particulière, on va simplement désigner le fichier des animations d'un autre modèle qui ressemble au notre et qui aura une fonction similaire. Par exemple on va utiliser les animations du modèle police pour n'importe quel autre modèle qui devra faire les mêmes actions comme courrir, marcher, tirer au pistolet ou à la mitraillette etc..
Bien sûr ça va sembler un peu médiocre pour un perfectionniste, mais il faut penser avant tout à l'efficacité. Créer une mod est un énorme travail et si on peut gagner un peu de temps, c'est pas de refus!!
On pourra toujours par la suite refaire ces animations pour les personnaliser, mais ce sera difficile de faire mieux que celle du jeu. Mieux vaut de belles animations classiques que des animations personnelles loupées!!
Si on a un modèle non humain, il faudra bien entendu tout refaire en fonction des besoins.
 
 
Avec le SDK on a un exemple d'un tel fichier QCI, en fait celui-ci fait appel à d'autres fichiers qci qui vont être pris en compte pour la compilation.
 
Voici un fichier QCI pour un modèle de ce type
 
//======================================
// Bidule
//======================================

$eyeposition 0 0 72

$bbox -13 -13 0 13 13 72

$modelname characters\bidule.mdl
$cdmaterials models\bidule

$model officer "bidule_ref.smd"


$includemodel Police_animations.mdl
$includemodel Police_ss.mdl

$attachment "baton" "ValveBiped.Anim_Attachment_RH" 0.00 -0.00 0.00 rotate -0 -0 -0
$attachment "Center" "ValveBiped.Bip01_Spine1" -6.20 2.09 0.00 rotate -0 97 90
$attachment "Chest" "ValveBiped.Bip01_Spine4" -2.70 3.88 -0.00 rotate -0 80 90
$attachment "LHand" "ValveBiped.Bip01_L_Hand" 3.00 -0.00 -0.00 rotate -0 0 -0
$attachment "RHand" "ValveBiped.Bip01_R_Hand" 3.00 0.00 0.00 rotate 0 -0 -0
$attachment "zipline" "ValveBiped.Bip01_Spine4" 2.00 -2.00 -0.00 rotate 0 -17 -0
$attachment "manhack" "ValveBiped.Bip01_Spine" 18.00 -6.00 3.00 rotate -25 50 0

$include "standardhierarchy.qci"
$include "commonbones.qci"

$include "ruleshierarchy.qci"
$include "hitbox.qci"
$include "ragdoll.qci"

//==============================================================================

$lod 12
{
replacemodel "bidule_ref" "bidule_LOD_1"
}

$lod 18
{
replacemodel "bidule_ref" "bidule_LOD_2"
$include "removehands.qci"
}

$lod 42
{
replacemodel "bidule_ref" "bidule_LOD_3"
$include "lowesthumanskeleton.qci"
}

$lod 55
{
replacemodel "bidule_ref" "bidule_LOD_4"
$include "lowesthumanskeleton.qci"
}
$lod 80
{
replacemodel "bidule_ref" "bidule_LOD_5"
$include "lowesthumanskeleton.qci"
}

$shadowlod
{
replacemodel "bidule_ref" "bidule_shadow_LOD"
$include "lowesthumanskeleton.qci"
}

//==============================================================================

 
Ce qui signifie dans l'ordre, la hauteur des yeux
 
Puis la taille de la boite d'enveloppe
 
L'emplacement et le nome du modèle : ici il sera mis dans le dossier models\characters\bidule.mdl
L'emplacement des textures du modèle : dans le dossier materials\models\bidule
 
Le fichier de référence contenant le squelette et les triangles du modèle
 
Ensuite les deux fichiers d'animation qui seront utilisés pour bidule, ce sont les animations du policier
 
Les points d'attaches pour les armes et les effets, ce sera utilisé par le code du jeu, ce sont les points d'attache du policier, mais on n'aura pas besoin de tous.
 
Puis on a 5 fichiers QCI à inclure dans la compilation.
 
standardhierarchy.qci : qui défini la hiérarchie du squelette pour un modèle humain standard, ceci garantit que les liaisons seront correctement prises en compte dans le source engine.
 
commonbones.qci : définit le squellette standard d'un humain et attribue les noms définitifs aux os, il semble qu'il y ait besoin d'une correction, probablement un petit bug ou une modification arrivée tardivement. On va également y définir les points d'attache par défaut des modèles humains, les deux mains et la tête.
 
ruleshierarchy.qci : ça contient les informations pour le modèle physique, la cinématique du modèle et les angles de liberté.
 
hitbox.qci : les définitions des hitbox ou boites de collision utilisées pour les impactes
 
ragdoll.qci : le fichier qui va définir comment se comporte le modèle en mode ragdoll, c'est ici qu'on va définir comment chaque élément du squelette va pouvoir se déplacer et pivoter par rapport à son attache. on y définit aussi le modèle smd de pose.
 
Finalement on a les 6 fichiers de LOD . Removehands.qci définit comment à une certaine distance les doigts ne sont plus pris en compte pour les animations. Lowesthumanskeleton.qci définit la simplification du squelette pour les grandes distances.
Ces fichiers de LOD sont importants, sans eux, si on a de nombreux modèles animés à grande distance, le moteur va peiner et le FPS va chuter.
 
Avec ce fichier bidule.qci, vous pouvez compiler un modèle qui va fonctionner aussi bien que le policier de Half-Life 2.